﻿Imports System.Collections.ObjectModel  
Imports System.Data  
Imports System.IO
Imports System.Text    




Public Class CBenchServicio




Private  RUTAARCHIVO    as string 
Private  NOMBREARCHIVO  as string 
Private  TLOADERCOMMAND as string 
Private  NOMBRERESPALDO as string 
Private  PARAMETROS     as string 



Public Sub New()

   Dim servGral As New CServiciosGenerales 



   RUTAARCHIVO    = CServicioLocalSQLServerDB.ObtenerRutaArchivoBench () 
   NOMBREARCHIVO  = servGral.ObtenerPREFIJOARCHIVO &   CServicioLocalSQLServerDB.ObtenerNombreArchivoBench ()
   NOMBRERESPALDO = servGral.ObtenerPREFIJOARCHIVO & CServicioLocalSQLServerDB.ObtenerNombreArchivoRespBench ()
   TLOADERCOMMAND = CServicioLocalSQLServerDB.ObtenerNombreComandoTLoderBench ()   
   PARAMETROS     = CServicioLocalSQLServerDB.ObtenerParamComandoTLoderBench ()

End Sub



Public Function ObtenerValoresInstrumentos() As  List(Of CTInstrumentoDatos )

Dim lstInstrumentos As New  list(Of CTInstrumentoDatos)
Dim dt As DataTable 

Try

    dt =  CServiciosMacrosSyBaseDB.ObtenerDatosInstrumento ()  
    For Each registro As DataRow In dt.Rows 
       lstInstrumentos.Add (New CTInstrumentoDatos(registro) ) 
    Next

    Return lstInstrumentos 

Catch ex As Exception
   Throw ex
End Try


End Function


Public Function  obtenerCvesBenchDecalog() As IEnumerable 

Try
  Return  CServicioLocalSQLServerDB.ObtenerCveBenchDecalog ().AsEnumerable  
Catch ex As Exception
    Return Nothing 
End Try

End Function


Public Function  obtenerCvesBenchDecalogT() As ObservableCollection(Of CTNombresBench)
Dim lstNombresBench As New ObservableCollection(Of CTNombresBench )
Dim dt As DataTable 

Try
    dt =  CServicioLocalSQLServerDB.ObtenerCveBenchDecalog()
    
    For Each registro As DataRow In dt.Rows 
        lstNombresBench.Add(New CTNombresBench (  registro("NOM_BENCH_RGOS"),registro("CVE_BENCH_DECALOG")) )                                 
    Next
  
Catch ex As Exception
    Return Nothing 
End Try


   Return lstNombresBench 

End Function


Public function GrabarArchivo (ByRef listaDatos As ObservableCollection(Of CTBench), ByRef sMsgError As String ) As Boolean 

Const sPrimeraLinea = "#init,LOADMDL,MODEL_PF"
dim   preCabecera As String 
Dim   detalle     As String 


Try 


  Using sw As StreamWriter = File.CreateText(RUTAARCHIVO  & NOMBREARCHIVO)
          
          sw.WriteLine (sPrimeraLinea)


          Dim vBenchCtr = From registro in listaDatos            
                          Select registro.BenchControl,registro.CodigoDecalog   
                          Distinct 

          

           For Each regBenchCtr In vBenchCtr

              PreCabecera  = "MdlCod.=" & regBenchCtr.CodigoDecalog  & ",MdlName=" & regBenchCtr.BenchControl  & ",MdlAsstType=D,MdlCashFlg=1,MdlCashDatFl=X,MdlCashTyp=0,MdlValuTyp=0,MdlPosTyp=1,MdlUnionTyp=1,MdlWghtTyp=%,MdlDiffTyp=A,MdlDiffSgn=+,MdlDiffVal=0,MdlLot=1,MdlTyp=C"
              sw.WriteLine (PreCabecera)


              Dim codigoDecalog As String = regBenchCtr.CodigoDecalog 
              Dim vDatos     = From datos in listaDatos          
                              where datos.CodigoDecalog  =  codigoDecalog 

              For Each dato In vDatos 

                 Dim peso As Double 
                 Try
                    peso = Convert.ToDouble  (dato.Peso)
                 Catch ex As Exception
                    peso = 0
                 End Try                  
                 detalle = "MdlCod.=" & dato.CodigoDecalog  & ",MdlCmpTyp=I,MdlCmpDef=" & dato.NumInstrumento  & ",MdlCmpWght=" & peso * 100 & ",MdlCmpWghtTp=%,MdlCmpDiff=0,MdlCmpLot=0,MdlCmpSort=1"
                 sw.WriteLine (detalle)
                
              Next

          Next


          sw.Close()
  End Using


  'Construye el respaldo

  Dim fechaServer        As Date = CServiciosMacrosSyBaseDB.FechaHoyDB
  Dim NomArchivoRespaldo As String = RUTAARCHIVO  & NOMBRERESPALDO

  NomArchivoRespaldo &= fechaServer.Day & fechaServer.Month & fechaServer.Year & fechaServer.Hour & fechaServer.Minute & fechaServer.Second & ".txt"
  My.Computer.FileSystem.CopyFile (RUTAARCHIVO  & NOMBREARCHIVO, NomArchivoRespaldo)  
  

  Return true

Catch ex As Exception
   sMsgError = ex.Message 
   Return False 
End Try   


 
End Function 


Public sub EjecutarProceso ()  
Dim servGrales As New CServiciosGenerales() 

 Try
            servGrales.EjecutarProceso(RUTAARCHIVO & TLOADERCOMMAND, PARAMETROS & RUTAARCHIVO & NOMBREARCHIVO, "CargaBench")
 Catch ex As Exception

 End Try
 
End sub



Public Function AltaNombreBench(ByVal nombreRgo As String, ByVal nombreDec As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.AltaNombreBench(nombreRgo,nombreDec)  = True then 
       Return true
    Else 
       Throw New Exception("Falló el alta en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function


Public Function ActualizarNombreBench(ByVal nombreRgoANT As String, ByVal nombreDecANT As String,ByVal nombreRgoNVO As String, ByVal nombreDecNVO As String) As Boolean

   Try 
   if CServicioLocalSQLServerDB.ActualizarNombreBench(nombreRgoANT, nombreDecANT,nombreRgoNVO, nombreDecNVO) = True then 
       Return true
   Else 
        Throw New Exception("Falló la actualización en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function


Public Function EliminarNombreBench(ByVal nombreRgo As String, ByVal nombreDec As String) As Boolean 
Try 
   if CServicioLocalSQLServerDB.EliminarNombreBench(nombreRgo,nombreDec)  = True then 
       Return true
    Else 
        Throw New Exception("Falló la baja de nombre Bench en la Base de Datos")
   End If

Catch ex As Exception
   Throw ex 
End Try

End Function



End Class
